﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Business.Models;
using System.Data;
using System.Data.Entity.Infrastructure;

namespace Business.DAO
{
    public class NhanVienDAO
    {
        private ISSContext db = new ISSContext();
        public List<NhanVien> GetAll()
        {
            return db.NhanVien.ToList();
        }

        public NhanVien Get(int id)
        {
            NhanVien NhanVien = db.NhanVien.Find(id);
            return NhanVien;
        }

        public int Create(NhanVien NhanVien)
        {
            try
            {
                db.NhanVien.Add(NhanVien);
                return db.SaveChanges();
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int CreateQuanTri(NhanVien nhanVien, bool isAdmin)
        {
            try
            {
                db.NhanVien.Add(nhanVien);
                int result = db.SaveChanges();
                if (result > 0)
                {
                    QuanTri quanTri = new QuanTri();
                    quanTri.IdNhanVien = nhanVien.IdNhanVien;
                    quanTri.QuanLy = isAdmin;
                    db.QuanTri.Add(quanTri);
                    return db.SaveChanges();
                }
                return result;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }


        public int DeleteQuanTri(int idNhanVien)
        {
            try
            {
                QuanTri quanTri = db.QuanTri.Find(idNhanVien);
                db.QuanTri.Remove(quanTri);
                NhanVien NhanVien = db.NhanVien.Find(idNhanVien);
                db.NhanVien.Remove(NhanVien);
                return db.SaveChanges();
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int DeleteGiaoVien(int idNhanVien)
        {
            try
            { 
                GiaoVien quanTri = db.GiaoVien.Find(idNhanVien);
                db.GiaoVien.Remove(quanTri);
                NhanVien NhanVien = db.NhanVien.Find(idNhanVien);
                db.NhanVien.Remove(NhanVien);
                return db.SaveChanges(); 
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int CreateGiaoVien(NhanVien nhanVien)
        {
            try
            {
                db.NhanVien.Add(nhanVien);
                int result = db.SaveChanges();
                if (result > 0)
                {
                    GiaoVien quanTri = new GiaoVien();
                    quanTri.IdGiaoVien = nhanVien.IdNhanVien;
                    db.GiaoVien.Add(quanTri);
                    return db.SaveChanges();
                }
                return result;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int Edit(NhanVien NhanVien)
        {
            try
            {
                db.Entry(NhanVien).State = EntityState.Modified;
                return db.SaveChanges();
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int Delete(int id)
        {
            try
            {
                NhanVien NhanVien = db.NhanVien.Find(id);
                db.NhanVien.Remove(NhanVien);
                return db.SaveChanges();
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public int UpdatePassword(NhanVien daily)
        {
            try
            {
                NhanVien tmp = db.NhanVien.Find(daily.IdNhanVien);
                tmp.MatKhau = daily.MatKhau;
                DbEntityEntry entry = db.Entry(tmp);
                entry.State = EntityState.Modified;
                return db.SaveChanges();
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public List<NhanVien> GetByTruongHoc(TruongHoc TruongHoc)
        {
            var query = from nhanvien in db.NhanVien where nhanvien.truongHoc == TruongHoc select nhanvien;
            List<NhanVien> lstNhanVien = query.ToList<NhanVien>();
            return lstNhanVien;
        }

        public List<NhanVien> GetByType(byte type)
        {
            var query = from nhanvien in db.NhanVien where nhanvien.LoaiNhanVien == type select nhanvien;
            List<NhanVien> lstNhanVien = query.ToList<NhanVien>();
            return lstNhanVien;
        }

        public List<NhanVien> GetByNhanVien(int nguoitao)
        {
            var query = from nhanvien in db.NhanVien where nhanvien.NguoiTao == nguoitao select nhanvien;
            List<NhanVien> lstNhanVien = query.ToList<NhanVien>();
            return lstNhanVien;
        }

        public List<NhanVien> GetByNhanVien_TruongHoc(int TruongHoc, int nguoitao)
        {
            var query = from nhanvien in db.NhanVien where nhanvien.NguoiTao == nguoitao && nhanvien.IdTruongHoc == TruongHoc select nhanvien;
            List<NhanVien> lstNhanVien = query.ToList<NhanVien>();
            return lstNhanVien;
        }
    }
}